import os.path
import re
from urllib import parse
import requests

# 定义从百度当中下载图片的类
class BaiDuImg(object):
    # 设置初始化变量信息
    def __init__(self):
        print("初始化信息")
        # 接受并设置百度图片查询的连接地址
        self.url = 'https://image.baidu.com/search/flip?tn=baiduimage&word={}'
        # 设置伪代理
        self.header = {'User-Agent': 'Mozilla/4.0'}

        # 获取可下载的网页信息
    def getImage(self, url, word):
        # 校验访问时的地址
        print(url)
        # 获取相应对象
        res = requests.get(url, headers=self.header)
        # 更改编码格式
        res.encoding = "utf-8"
        # 获取页面信息
        myhtml = res.text
        # 将页面信息打印
        print(myhtml)
        # 正则表达式 对图片源的正则
        myread = '"hoverURL":"(.*?)"'
        # 生成正则表达式对象
        pat = re.compile(myread, re.S)
        # 获取页面中所有图片的信息
        imgList = pat.findall(myhtml)
        # 打印图片地址信息
        # print(imgList)
        self.image(imgList, word)

    # 生成图片
    def image(self, imgUrllist, word):
        # 创建文件目录
        mydir = "d:/myImg/{}/".format(word)
        # 对文件夹进行判断
        if not os.path.exists(mydir):
            os.makedirs(mydir)
        # 给图片名称增加序号
        i = 1
        for imglink in imgUrllist:
            filename = '{}{}....{}.jpg'.format(mydir, word, i)
            self.saveImg(imglink, filename)
            i += 1

    # 将图片下载到本地
    def saveImg(self, imglink, filename):
        html = requests.get(url=imglink, headers=self.header).content
        # 下载图片
        with open(filename, 'wb')as f:
            f.write(html)
        print(filename, '下载成功')
    # 获取图片的主类入口
    def myImg(self):
        # 获取控制台输入的信息
        word = input("请输入想要下载的图片类型名称: ")
        # 对输入的类型名称进行转换
        wordParse = parse.quote(word)
        # 拼接要查找的图片地址
        url = self.url.format(wordParse)

        self.getImage(url, wordParse)


if __name__ == '__main__':
    try:
        # 对下载图片是整体类报错进行捕捉
        myImg = BaiDuImg();
        myImg.myImg()
    except Exception as e:
        print("调用下载图片类报错：", e)


